home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / program / 522 / okami12 / doc / okami.doc < prev    next >
Encoding:
Text File  |  1991-04-17  |  59.6 KB  |  1,377 lines

  1.  
  2.     ===============================================
  3.  
  4. @(#)      OKAMI SHELL VERSION 1.2 - BENUTZERANLEITUNG
  5.  
  6.     ===============================================
  7.             Stand: 25.12.90
  8.  
  9.  
  10.         BITTE ERST DIE DATEI README LESEN!
  11.  
  12. ----------------------------------------------------------------------------
  13. EINFÜHRUNG
  14.  
  15. Die Okami-Shell ist ein (weiterer) Versuch, auf dem Atari ST so etwas wie
  16. Unix-Gefühle aufkommen zu lassen. Das Programm wendet sich an alle, die
  17. die Möglichkeiten eines Kommandointerpreters denen des Desktops vorziehen.
  18. Die Shell ist vor allem beim Betrieb mit einer Festplatte ausgesprochen 
  19. nützlich.
  20.  
  21. Obwohl es schon einige Programme dieser Art gibt, gibt es gewichtige Gründe,
  22. die Okami-Shell zu benutzen und sich durch die folgende Anleitung zu
  23. arbeiten.
  24.  
  25. Die Okami-Shell ist einer der Unix-orientierten Kommandointerpreter für den
  26. ST, der die Unix-Möglichkeiten der Ein/Ausgabe-Umleitung und des Pipelinings
  27. auch für die internen (in der Shell eingebauten) Kommandos ermöglicht.
  28. Die Ein/Ausgabe-Umleitung ist die Möglichkeit, die Standard-Ausgabe eines
  29. Programmes, d.h. alles, was mit printf etc. ausgegeben wird und normaler-
  30. weise auf dem Bildschirm landet, sowie die Standard-Eingabe in eine Datei
  31. oder zu einem Gerät (z.B. zum Drucker) umzuleiten. Die Umleitung funktio-
  32. niert unter TOS mit dem GEM-Desktop a) nur bei TTP-Programmen, weil man
  33. nur bei diesen die Möglichkeit hat, eine Kommandozeile einzugeben, und
  34. b) nur bei Programmen, deren Compiler die Umleitung unterstützen. Die Okami-
  35. Shell führt die Umleitung selber durch, wodurch auch Programme, die ihre
  36. Kommandozeile nicht beachten (z.B. solche, die mit dem Pd-Modula-2-System
  37. erstellt wurden), umgeleitet werden können.
  38.  
  39. Die Okami-Shell kann allerdings noch etwas mehr: sie ist ein universelles
  40. Utility, mit dem man nicht nur Programme starten, sondern auch Programme
  41. schreiben und debuggen usw. kann. Als Bonbon hat sie einen eingebauten UPN-
  42. Rechner mit ca. 80 Funktionen.
  43.  
  44. Bei der Programmierung einer Shell oder eines Kommandointerpreters steht
  45. man immer vor der Frage, ob man für die in der Shell eingebauten Kommandos
  46. Unix-, MS-DOS- oder eine selbstausgedachte Schreibweise benutzen soll, 
  47. d.h. ob man die Kommandos ls oder dir, mv oder rename, cp oder copy nennen
  48. soll oder ob man sich eingene Kommandonamen ausdenkt. Die Okami-Shell ist
  49. an den Unix-Bezeichnungen orientiert, genauer gesagt an dem Unix-Derivat
  50. AIX, das z.B. auf dem IBM RT PC 6150 läuft. Natürlich müssen bei soetwas
  51. Abstriche gemacht werden, der Atari ist schließlich keine Unix-Maschine,
  52. und eine Shell ist kein Betriebssystem.
  53.  
  54. Wer sich in Unix einigermaßen auskennt, kann mit der Okami-Shell wahrschein-
  55. lich sofort loslegen. Die folgende Anleitung stellt die Verwendung der
  56. Shell dar, die Erklärung der internen Kommandos mit Syntax befindet sich
  57. in der Datei commands.doc.
  58.  
  59. Um die vielen Versionen der Shell unterscheiden zu können, gibt das Kommando
  60. "ver" eine Information mit Versionsnummer und Kompilierungszeitpunkt aus.
  61. Zur Interpretation der Versionsnummer siehe tricks.doc.
  62.  
  63.  
  64. ----------------------------------------------------------------------------
  65. SUPPORT
  66.  
  67. Die Okami-Shell ist public domain, d.h. sie kann von jedermann benutzt und
  68. weitergegeben werden, ohne daß jemand etwas dafür zu bezahlen hat. Trotz-
  69. dem bitte ich um Rücksendung der Software-Kontaktkarte, die nach Eingabe
  70. von "contact" von der Shell über den Hardcopydrucker ausgegeben wird.
  71.  
  72. Über den Support ist es jederzeit und für jeden möglich:
  73. 1) die neueste Version der Shell zu bekommen,
  74. 2) konfektionierte  Versionen zu erhalten, in denen die Systembeschränkungen
  75. (Anzahl der Variablen, Funktionen etc.) verändert sind. Wer also eine
  76. Version braucht, die bis zu 200 Variablen verwalten kann, kann eine solche
  77. bekommen. Außerdem können beliebige Kommandos ausgeblendet werden, um die
  78. Shell kleiner zu machen. Wer also z.B. den UPN-Rechner und das basep-
  79. Kommando nicht braucht, kann eine Shell erhalten, in der diese Kommandos
  80. nicht enthalten sind, die aber entsprechend kürzer ist.
  81.  
  82. Es ist verboten, das Programm zu verkaufen oder es unter einem anderen
  83. Namen als meinem zu vertreiben. Wer irgendwelche Teile des Programms oder
  84. der Quellen in eigenen Programmen benutzen will, darf dies tun, solange
  85. mein Name im Programm und in der Dokumentation erwähnt wird.
  86. Die Datei "copying" enthält genaue Hinweise zum Kopieren und Weitergeben der
  87. Shell.
  88.  
  89. Das Programm wird voll unterstützt, d.h. es wird dynamisch weiterentwickelt,
  90. und jeder Anwender kann bei mir jederzeit die neueste Version bestellen.
  91. Ebenso stehe ich bei Problemen und Wünschen zur Verfügung. Spenden sind
  92. natürlich auch willkommen, aber ausdrücklich nicht Vorraussetzung für
  93. den Erwerb von neuen Versionen, Anleitungen oder sonstigen Hilfen (dies
  94. ist allen Pd-Programmierern zur Nachahmung empfohlen).
  95.  
  96. Der Quellcode kann ebenfalls bei mir bestellt werden (ca. 9000 Zeilen C).
  97. Als kleine Spende hätte ich hierfür allerdings gerne einen Taschenrechner -
  98. möglichst schön, am besten alt, notfalls ohne Batterien, aber bitte
  99. funktionsfähig. Dafür gibt es den vollständigen Quellcode mit allen verwen-
  100. deten Includefiles. (Was auch allen Programmierern zur Nachahmung empfohlen
  101. ist. Schließlich sind Quellcodes keine Staatsgeheimnisse, und vielleicht
  102. kann noch jemand etwas aus ihnen lernen.) (Nebenbei: um die Quellen der
  103. Okami-Shell zu kapieren, sollte man schon ziemlich gut C können und sich
  104. unter folgendem etwas vorstellen können:
  105. 1) Zeiger, 2) Arrays, 3) Zeiger auf Funktionen, 4) Arrays von Zeigern auf
  106. Funktionen, 5) Zeiger auf solche etc.)
  107.  
  108.  
  109. Meine Adresse:
  110.  
  111.     Wolfram Rösler
  112.     Augustastr. 44-46
  113.     D-5100 Aachen
  114.  
  115.     Tel. 0241/504290
  116.  
  117.  
  118. Wer irgendwelche Anregungen für weitere Versionen der Shell hat, kann sich
  119. damit jederzeit an mich wenden. Vergessen Sie jedoch nicht, daß die Okami-
  120. Shell ein Abkömmling der Bourne-Shell ist (im Gegensatz zu den meisten an-
  121. deren Shells wie Gulam und Mupfel, die die C-Shell simulieren). Alle An-
  122. fragen wegen Änderungen, die die Okami-Shell von dieser Identität weg und
  123. in die Nähe der C-Shell oder gar von MS-DOS bewegen würden (z.B. alias,
  124. pushd, popd oder MS-DOS-Features), sind von vornherein sinnlos. Statt alias
  125. gibt es die wesentlich leistungsfähigeren Shell-Funktionen, pushd und
  126. popd vermisse ich absolut nicht, und wer lieber MS-DOS als Unix hat, dem
  127. ist sowieso nicht zu helfen.
  128.  
  129. ----------------------------------------------------------------------------
  130. PROGRAMMFEHLER
  131.  
  132.     "Selbst der  umsichtigste Programmierer kommt manchmal in
  133.     Situationen, wo das Programm nicht richtig funktioniert."
  134.                 Texas Instuments, "Individuelles Programmieren"
  135.                 Handbuch zu TI 58/58C/59, 1977
  136.  
  137. Der Software-Support deckt die Beseitigung von Fehlern in der Shell ab. Wer
  138. einen Fehler findet, sollte also nicht die Okami-Diskette in die Ecke schmeißen
  139. und sich einer anderen Shell zuwenden (die hat nämlich auch Fehler), sondern
  140. mit einen Hinweis mit möglichst genauer Fehlerbeschreibung schicken. Wenn
  141. man eine Diskette und DM 1,70 Rückporto beilegt, bekommt man die korrigierte
  142. Version der Shell sobald wie möglich zurück.
  143. Natürlich kann ich keine Verantwortung für irgendwelche Schäden, die durch die
  144. Shell, ihre Anwendung oder die Unfähigkeit ihrer Anwendung verursacht werden,
  145. übernehmen.
  146.  
  147. ----------------------------------------------------------------------------
  148. LIEFERUMFANG
  149.  
  150. Zur Okami-Shell gehören die folgenden Dateien:
  151.  
  152.     KERN:
  153.     sh.ttp        Das Haupt-Shellprogramm.
  154.     msh.prg     Die Microshell zum Starten als GEM-Programm.
  155.     msh.inf     Konfigurationsdatei zur Microshell.
  156.     profile     Konfigurationsdatei beim Start der Shell.
  157.     help        Textdatei mit Syntaxerklärungen.
  158.     okami.pic    Das Titelbild.
  159.     EXTERNE KOMMANDOS:
  160.     calc.sh     Benutzerschnittstelle zum eingebauten UPN-Rechner.
  161.     format.ttp    Programm zum Formatieren von Disketten.
  162.     gem.prg     Programm zur Benutzung von Accessories.
  163.     contact.sh    Shellscript zum Ausdrucken der Kontaktkarte.
  164.     print.sh    Shellscript zum Ausdrucken von Dateien.
  165.     print.tr    Filtertabelle dazu.
  166.     sed.ttp        Der Streameditor. Siehe sed\sed.doc .
  167.     showpic.sh    Demo-Shellscript zur Anzeige von Bilddateien.
  168.     QUELLEN:
  169.     msh.c        msh.prg (C)
  170.     gem.lst     gem.prg (GFA-Basic 2.0)
  171.     format.c    format.ttp (C)
  172.     system.c    Zum Einbinden der Shell in eigene Programme. (C)
  173.     DOKUMENTATION:
  174.     readme        Grundeinführung für den Anwender.
  175.     doc\*.*     Anleitungen.
  176.     SONSTIGES:
  177.     okami.dbl    Ein Icon mit dem Okami-Schriftzeichen zum Einbau 
  178.             in eine Icondesk-Datei.
  179.     altur112.ttp    Eine Überraschung für den Programmstart.
  180.     sed\*.*        Ein Ordner mit den Quellen, Anleitung und Beispiel-
  181.             dateien zu dem Streameditor "sed".
  182.  
  183.  
  184. Alle ausführbaren Programme wurden mit dem Programm-Packer von Th. Quester
  185. und M. Fritze gepackt.
  186. sed.ttp und die Dateien im sed-Ordner sind Teil des Gnu-Betriebssystems. Sie
  187. unterliegen den Gnu-Lizenzbestimmungen und dürfen daher nur mit den Quellen
  188. weitergegeben werden.
  189. Über den Urheber der Datei altur112.ttp ist mir nichts bekannt, ich habe sie
  190. auf einer Pd-Diskette von 1987 gefunden. Ausgepackt ist sie übrigens über
  191. 22 KB groß.
  192.  
  193. ----------------------------------------------------------------------------
  194. RAM        Die Shell benötigt ca. 150 KB an Laufzeitspeicher
  195.         => lauffähig auch auf 512KB-Maschinen. Empfohlen werden
  196.         allerdings 1 MB oder mehr.
  197. Massespeicher    Für die zum Lauf notwendigen Dateien werden minimal ca.
  198.         120 KB benötigt. Mit allen Hilfsdateien (Microshell,
  199.         Profile, sed,...) werden ca. 200 KB benötigt.
  200.         Die Shell kann jedem Massespeicher betrieben werden. Für
  201.         die Verwendung des Pipelinings ist es jedoch notwendig,
  202.         daß auf einen Massespeicher (nicht notwendigerweise den,
  203.         von dem die Shell gestartet wurde) geschrieben werden
  204.         kann. Für diesen Zweck kann auch eine eigene kleine
  205.         Ramdisk angelegt werden (16-32K).
  206. Bildschirm    Läuft fehlerfrei in hoher und mittlerer Auflösung. Der
  207.         Betrieb in niedriger Auflösung ist möglich, aber einige
  208.         interne Kommandos gehen davon aus, das pro Zeile 80
  209.         Zeichen zur Verfügung stehen (z.B. df und hd). Die Be-
  210.         nutzung dieser Kommandos kann dann zu Störungen in der
  211.         Bildschirmausgabe führen. In keinem Fall kommt es jedoch
  212.         zu einem Programmabsturz.
  213.         Sollte mit jeder Farb- und Schwarzweiß-Emulation funktio-
  214.         nieren.
  215. Geräte        Die Shell unterstützt Maus, Drucker und die RS232-Schnitt-
  216.         stelle. Es werden jedoch keine Geräte außer Bildschirm und
  217.         Tastatur unbedingt benötigt (auch nicht die Maus). (Genau-
  218.         genommen werden nicht einmal Bildschirm und Tastatur unbe-
  219.         dingt benötigt.)
  220. Betriebssystem    Die Shell wurde unter TOS 1.2 und 1.4 auf einem Atari 1040 ST
  221.         entwickelt und ist "sauber" programmiert, d.h. es erfolgt
  222.         kein Zugriff auf undokumentierte oder veränderliche System-
  223.         adressen o.ä. Die Shell sollte daher mit jedem früheren
  224.         und zukünftigen TOS zusammenarbeiten (abgesehen von Betriebs-
  225.         systemfehlern.)
  226. Software    Jedes TOS- und TTP-Programm kann von der Shell als externes
  227.         Kommando aufgerufen werden. GEM-Programme können aufgerufen
  228.         werden, wenn die Shell selber als GEM-Programm gestartet
  229.         wird, was z.B. der Fall ist, wenn msh.prg zum Start der
  230.         Shell benutzt wird.
  231.         Zum Verändern der Konfigurationsdateien profile und msh.inf
  232.         ist ein Ascii-Editor erforderlich. Ich empfehle Tempus oder
  233.         den Pd-Editor Micro-Emacs.
  234.         (Micro-Emacs ist über den Pd-Versand oder direkt bei mir er-
  235.         hältlich.)
  236.  
  237.  
  238. ----------------------------------------------------------------------------
  239. INSTALLATION
  240.  
  241. Die Okami-Shell kann direkt von der Diskette gestartet werden. Siehe hierzu
  242. den folgenden Abschnitt.
  243. Ihre volle Effizienz entwickelt die Shell allerdings erst beim Einsatz
  244. von der Ramdisk oder Festplatte.
  245. Theoretisch kann die Shell auch auf einem Eprom installiert werden.
  246.  
  247.  
  248. INSTALLATION AUF RAMDISK
  249.  
  250. Ich empfehle die selbstkomprimierende Maxidisk, da sie die optimale Speicher-
  251. ausnutzung garantiert. Für die Shell sollten mindestens 100 KB Maxidisk
  252. oder ca. 150 KB einer anderen Ramdisk zur Verfügung stehen. Wer genug 
  253. Speicher hat, sollte die Ramdisk auf mindestens 200 KB konfigurieren.
  254.  
  255. Für den vollen Betrieb der Shell sollten folgende Dateien (am besten in
  256. einen eigenen Ordner) auf die Ramdisk kopiert werden:
  257.  
  258.     sh.ttp
  259.     profile
  260.     msh.prg
  261.     msh.inf
  262.     help
  263.     print.tr
  264.     okami.pic
  265.     commands.doc        <------ aus dem Anleitungsordner
  266.     altur112.ttp
  267.   in einem Unterordner namens bin:
  268.     *.sh
  269.     format.ttp
  270.     gem.prg
  271.     sed.ttp
  272.     callsed.sh        <------ aus dem Ordner "sed"
  273.     ship.exe        <------ für Festplattenbenutzer: das
  274.                     ship.prg der Harddisk-Utility-Disk
  275.  
  276.  
  277. Wer seine Kontaktkarte bereits abgeschickt hat, braucht die Datei contact.sh
  278. nicht. Die Datei help wird für das Shell-Kommando "help" benutzt; wer diese
  279. Datei ausdruckt und neben den Rechner legt, kann sich den Platz auf der
  280. Ramdisk ebenfalls sparen. Dasselbe gilt für commands.doc, das außerdem
  281. ziemlich viel Platz beansprucht.
  282. Die Dateien msh.prg und msh.inf gehören zusammen und werden zum Start der
  283. Shell als GEM-Programm benutzt. Wer von der Shell keine GEM-Programme
  284. starten will, braucht diese Dateien nicht.
  285. Auf die externen Kommandos wie gem und format kann man natürlich auch
  286. verzichten, nur muß man dann u.U. etwas häufiger ins Desktop zurück.
  287. print.tr gehört zu print.sh. Wer nichts drucken will, kann auch darauf
  288. verzichten.
  289. Den Streameditor sed können sowieso nur absolute Unix-Gurus bedienen, also
  290. braucht man auch sed.ttp und callsed.sh nicht unbedingt.
  291. Wer nicht bei jedem Systemstart das Titelbild sehen möchte, kann die Datei
  292. okami.pic umbenennen oder löschen. Dasselbe gilt für altur112.ttp.
  293. Auch auf profile kann man verzichten, allerdings wird die Shell dann mit
  294. den eingebauten Voreinstellungen initialisiert.
  295. => Die einzige Datei, die man wirklich braucht, ist sh.ttp.
  296.  
  297. INSTALLATION AUF FESTPLATTE
  298.  
  299. Bei Verwendung der Okami-Shell mit einer Festplatte kommt echtes Unix-Feeling
  300. auf, vor allem wenn man die Shell nach dem Systemstart automatisch starten
  301. läßt (ich empfehle zum Autostart:
  302.     TOS 1.0        den Autostarter aus dem Data Becker-Buch "Die besten
  303.             Tips&Tricks für Atari ST", S. 24ff.
  304.     TOS 1.2        den Autostarter "startgem.prg", der zu Superboot 6.0
  305.             gehört, siehe PD-Journal 9/90, S. 43ff.
  306.     >= TOS 1.4    msh.prg im Desktop als Autostart-Applikation anmelden)
  307.     
  308. Mit einigen Tricks, die im folgenden erklärt werden, kann man sich z.B. bei
  309. jedem Start der Shell Datum und Uhrzeit des letzten Systemstarts ausgeben
  310. lassen oder das aktuelle Arbeitsverzeichnis so einstellen, wie man die Shell
  311. zuletzt verlassen hat.
  312. Außerdem kann man alle Programme, die man auf der Festplatte hat, per Name
  313. starten lassen, egal in welchem Verzeichnis man sich gerade befindet, und es
  314. werden sogar alle RSC-Dateien gefunden.
  315. Man tippt also z.B. ein:
  316.         edit datei.txt
  317. und es erscheint der Editor mit der Datei datei.txt, egal wo im Dateisystem
  318. der Editor sich befindet.
  319.  
  320. Für die Shell sollte ein eigener Ordner eingerichtet werden, in den die
  321. oben unter INSTALLATION AUF RAMDISK aufgeführten Dateien kopiert werden.
  322.  
  323. Außerdem ist es sinnvoll, eine kleine Ramdisk (16-32K) anzulegen und die
  324. Pipe-Operationen über diese laufen zu lassen. Siehe dazu weiter unten.
  325.  
  326. Wenn man sich die Anleitungen der Shell auf die Festplatte kopiert, braucht
  327. man die Datei commands.doc nicht noch einmal in den Shell-Ordner zu kopieren.
  328. Dann muß allerdings der Dateiname von commands.doc in der Shell-Variablen
  329. HELPFILE gespeichert werden. Siehe dazu weiter unten.
  330.  
  331. Wer sich sein Desktop mit Icondesk von Stefan Becker verschönert hat, kann
  332. die Icon-Datei okami.dbl direkt in die icons.img-Datei einbauen.
  333.  
  334.  
  335. INSTALLATION IM COOKIE-JAR
  336.  
  337. Der Cookie-Jar ist eine Möglichkeit des Betriebssystems, mit der installierte
  338. Programme dem System ihre Anwesenheit nebst Versionsnummer mitteilen können.
  339. Der Cookie-Jar wird erst ab TOS 1.6 vom Betriebssystem selber benutzt, kann
  340. aber bei allen früheren TOS-Versionen auch von Programmen installiert werden.
  341. Die Okami-Shell trägt sich unter der Kennung "OkSh" in den Cookie-Jar ein.
  342. Vorher installiert sie einen solchen, falls noch keiner vorhanden ist. Die
  343. Versionsnummer ist auf zwei Bytes aufgeteilt, bei Version 1.2 steht eine 2
  344. im niedrigsten und eine 1 im nächsthöheren Byte.
  345. Mit dem internen Kommando cookie kann der Cookie-Jar ausgelesen werden. Siehe
  346. hierzu commands.doc.
  347.  
  348. ----------------------------------------------------------------------------
  349. START DER SHELL
  350.  
  351. a) Direkt
  352.  
  353. Die Shell befindet sich in der Datei sh.ttp. Diese Datei kann vom Desktop
  354. aus per Doppelklick gestartet werden. In der folgenden Eingabebox kann
  355. man folgendes eintragen:
  356.  
  357.     * Ein Shell-Kommando, dann wird dieses Kommando ausgeführt und
  358.       die Shell wird beendet, d.h. nach der Ausführung erscheint
  359.       sofort wieder das Desktop.
  360.     * Man läßt die Eingabezeile leer, dann wird die Shell im Dialog-
  361.       modus gestartet, d.h. es erscheint ein Dollarzeichen als Prompt,
  362.       hinter dem dann alle Shellkommandos eingegeben werden können.
  363.       Beendet wird die Shell durch Eingabe von "exit" oder durch
  364.       Druck auf Ctrl V bei der Kommandoeingabe.
  365.     * Man gibt ein Minuszeichen ein, dann startet die Shell ebenfalls
  366.       im Dialogmodus, aber vorher wird festgestellt, ob sich im
  367.       aktuellen Verzeichnis (i.d.R. das, in dem sich sh.ttp befindet)
  368.       eine Datei namens "profile" befindet. Ist dies der Fall, so wer-
  369.       den aus dieser Datei Shell-Kommandos gelesen und ausgeführt. Mit
  370.       dieser Möglichkeit kann die Shell beim Start konfiguriert werden.
  371.       Diese Art, die Shell zu starten, heißt in Unix-Manier "Login-
  372.       Shell".
  373.  
  374. Es ist auch möglich, erst ein Minuszeichen und dann ein Kommando einzugeben,
  375. z.B.
  376.     - ls -l *.c
  377. Dann wird erst das Profile gestartet, dann das Kommando ausgeführt und die
  378. Shell beendet.
  379. Wenn die Parameterzeile mit -c beginnt, also z.B.
  380.     -c df a: c:
  381. , dann wird das -c ignoriert. Dies ist z.B. zum Aufruf der Shell aus dem
  382. PD-Editor Micro-Emacs nützlich.
  383.  
  384. Anmerkung: Über den Software-Support kann eine Shell bezogen werden, die sich
  385. im Hinblick auf das übergebene Minuszeichen genau andersherum verhält, d.h.
  386. sie initialisiert sich mit dem Profile immer, außer es wird ein Minuszeichen
  387. übergeben.
  388.  
  389.  
  390. b) Indirekt
  391.  
  392. Die Shell kann indirekt von jedem Programm aus mit der GEMDOS-Funktion
  393. Pexec gestartet werden. Dies geschieht z.B. bei Verwendung der mitgelie-
  394. ferten system-Funktion oder beim Aufruf von der Microshell. Da die Shell
  395. den Environment-String benutzt, sollten Programme, die das nicht tun,
  396. als letzten Parameter von Pexec eine NULL übergeben (und nicht einen Leer-
  397. string - das ist ein GROSSER Unterschied.).
  398. Wenn der Shell dabei ein Parameterstring übergeben wird, so wird dieser als
  399. Kommando ausgeführt. Er darf mehrere (durch Semikolon getrennte) Kommandos und
  400. I/O-Umleitung enthalten. Der Kommandostring kann, muß aber nicht durch "-c"
  401. eingeleitet sein.
  402. Wenn die Shell als Login-Shell gestartet werden soll und es möglich sein
  403. soll, GEM-Programme von der Shell aus zu starten, muß die Shell mit der
  404. Microshell (msh.prg) gestartet werden.
  405. Dazu müssen folgende Voraussetzungen zutreffen:
  406. 1) Im selben Directory wie sh.ttp stehen die Dateien msh.prg und msh.inf.
  407. 2) Die Datei msh.inf enthält mindestens die folgende Zeile:
  408. sh.ttp -
  409.  
  410. Dann wird die Shell nach Doppelklick auf msh.prg automatisch als Login-Shell
  411. gestartet. Es können alle GEM-Programme von der Shell aus ausgeführt werden.
  412. Siehe hierzu auch msh.doc.
  413.  
  414. Wenn die Shell auf diese Weise vom Desktop aus gestartet wird, sollte das
  415. Profile die Zeile
  416.     trap cursor -v
  417. enthalten. Dann wird nach dem Ende der Shell automatisch der Cursor abge-
  418. schaltet (auf dem Desktop stört er ziemlich). Siehe hierzu auch commands.doc.
  419.  
  420.  
  421. ----------------------------------------------------------------------------
  422. KONFIGURATION
  423.  
  424. Wenn der Shell als einziger Parameter ein Minuszeichen übergeben wird,
  425. sucht sie nach dem Start im aktuellen Verzeichnis eine Datei mit dem
  426. Namen profile. Wenn eine solche Datei vorhanden ist, wird sie wie ein
  427. Shellscript (siehe dazu weiter unten) ausgeführt.
  428. Das Profile kann eine Einschaltmeldung auf dem Bildschirm ausgeben und
  429. Shellvariablen wie z.B. das Prompt (PS1) setzen. Außerdem können die
  430. Shell-Flags eingestellt werden (siehe dazu das interne Kommando "set"
  431. in commands.doc). Das Profile kann alle Aktionen ausführen, die ein nor-
  432. males Shellscript auch ausführen kann.
  433.  
  434.  
  435.  
  436. ----------------------------------------------------------------------------
  437. KOMMANDOEINGABE
  438.  
  439. a) Von der Tastatur
  440.  
  441. Wenn die Shell im Dialogmodus gestartet ist, können nach dem Prompt (i.d.R.
  442. ein Dollarzeichen) Kommandos eingegeben werden. (Das mitgelieferte Profile
  443. stellt das Prompt um, so daß im Prompt immer das augenblickliche aktuelle
  444. Directory zu sehen ist.)
  445.  
  446. Mit dem internen Kommando keydef kann jede beliebige Taste umdefiniert werden.
  447. Das bedeutet, daß alle der unten angeführten Tastenfunktionen ungültig werden
  448. können, wenn die jeweiligen Tasten redefiniert werden. Die einzigen Funktionen,
  449. die nicht umdefiniert werden können, sind ENTER und Ctrl Shift Undo. Für
  450. weitere Informationen siehe commands.doc zum Thema keydef.
  451.  
  452. Bei der Eingabe werden folgende Sondertasten benutzt:
  453.  
  454.     Backspace    das zuletzt eingegebene Zeichen wird gelöscht.
  455.     Pfeil auf    Es wird das zuletzt eingegebene Kommando ange-
  456.             zeigt. Dieses kann mit ENTER übernommen oder
  457.             mit Backspace editiert werden. Durch wiederholten
  458.             Druck auf Pfeil auf wird das vorletzte Kommando
  459.             angezeigt usw. Es werden maximal 100 Kommandos
  460.             gespeichert (wer mehr braucht, benutze den Soft-
  461.             ware-Support, um eine entsprechend angepaßte Version
  462.             der Shell zu erhalten.) Diese Eigenschaft der Eingabe
  463.             nennt man "History".
  464.     Shift Pfeil auf Wie Pfeil auf, aber es wird die letzte Zeile aus der
  465.             History angezeigt, die mit der bisherigen Eingabe
  466.             übereinstimmt. Gibt man also ein "ls " und drückt
  467.             Shift Pfeil auf, dann wird das letzte ls-Kommando
  468.             zurückgeholt. Der Zeiger in der History-Liste steht
  469.             dann hinter dieser Zeile, ein weiterer Druck auf
  470.             Shift Pfeil Auf bringt also das vorletzte ls-Kommando
  471.             zurück usw.
  472.     Ctrl Pfeil auf    Wie Pfeil auf gefolgt von einem Druck auf ENTER, es
  473.             wird also das zuletzt eingegebene Kommando nicht nur
  474.             angezeigt, sondern auch ausgeführt. Geht auch zusammen
  475.             mit Shift.
  476.     Pfeil ab    Zeigt das nächste Kommando in der History-Liste an.
  477.             Mit Pfeil auf und Pfeil ab kann man also in den
  478.             in der History-Liste gespeicherten Kommandos 
  479.             blättern.
  480.     Shift Pfeil ab    Analog zu Shift Pfeil auf.
  481.     Ctrl Pfeil ab    Wie Pfeil ab gefolgt von einem Druck auf ENTER, analog
  482.             zu Ctrl Pfeil auf.
  483.     Pfeil links    Wie Backspace.
  484.     Pfeil rechts    Das nächste Zeichen der vorigen Eingabe wird zurück-
  485.             geholt. Siehe unten.
  486.     Insert        Speichert die aktuelle Position für Pfeil rechts.
  487.             Siehe unten.
  488.     Clr Home    Die Eingabezeile wird gelöscht.
  489.     Help        Es wird eine Erklärung des eingegebenen Kommandos
  490.             ausgegeben. Siehe unten.
  491.     Ctrl Shift Undo    Für diese Eingabezeile wird die Tasten-Redefinition
  492.             ausgeschaltet. Die Eingabe verhält sich also so, als
  493.             ob seit dem Start der Shell keine keydef-Kommandos aus-
  494.             geführt worden wären. Die Funktion wird durch ein
  495.             Klingelzeichen bestätigt.
  496.     Control F    Es erscheint eine Fileselect-Box, der ausgewählte
  497.             Dateiname wird in die Eingabe übernommen. Das geht nur,
  498.             wenn gon aktiv ist (siehe commands.doc zum Stichwort
  499.             gon).
  500.     Control P    Es wird Hardcopy ausgeführt. Dies geschieht durch Auf-
  501.             ruf der Shellfunktion "screensave". Die Voreinstellung
  502.             dieser Funktion ist ein einfacher Aufruf des internen
  503.             Kommandos "hardcopy", wodurch der Bildschirminhalt auf
  504.             dem Drucker ausgegeben wird. In der Datei tricks.doc
  505.             ist eine screensave-Funktion angegeben, durch die die
  506.             Hardcopy in eine Datei  geschrieben wird.
  507.     Control V    Die Shell wird beendet.
  508.  
  509.  
  510. Es können beliebige Ascii-Codes in der Schreibweise "^ooo" eingegeben
  511. werden, wobei ooo eine dreistellige Oktalzahl ist. Um z.B. ein Escape-
  512. zeichen in eine Eingabe einzubauen:
  513.     echo Jetzt kommt ein Esc: ^033 das war das Esc
  514. Auf diese Weise können alle VT52-Sequenzen benutzt werden. Siehe auch
  515. "echo" in commands.doc.
  516.  
  517. Beispiele zur Verwendung von Pfeil rechts und Insert:
  518.  
  519. 1) Anzeige der Namen aller DOC-Dateien, danach Ausgabe derselben.
  520.    Die Kommandofolge lautet:
  521.     dir *.doc
  522.     cat *.doc
  523.    Nach der Eingabe von "dir *.doc" tippt man "cat" und drückt dann auf
  524.    die Pfeil rechts-Taste: es erscheinen die weiteren Zeichen der vorigen
  525.    Eingabe, also " *.doc".
  526.  
  527. 2) Anzeige der Namen aller C-Dateien, danach Ausgabe der vollständigen Datei-
  528.    liste, nach Dateidatum geordnet.
  529.    Die Kommandofolge lautet:
  530.    ls *.c
  531.    ls -lt *.c
  532.    Nach der Eingabe von "ls *.c" drückt man zweimal auf Pfeil rechts: es
  533.    erscheint "ls". Dann drückt man Insert, um die Position zu speichert,
  534.    tippt " -lt" und drückt dreimal auf Pfeil rechts, um die weiteren
  535.    Zeichen der vorigen Eingabe zurückzuholen.
  536.  
  537.                     *** VERSUCH MACHT KLUCH ***
  538.  
  539. Zur Benutzung der Help-Taste:
  540.  
  541. Mit der Help-Taste kann jederzeit, und zwar ohne die Eingabe zu stören, zu
  542. einem Kommando die entsprechende Anleitung aus der Datei commands.doc ange-
  543. zeigt werden. Will man z.B. eine Diskette formatieren, so tippt man das
  544. Kommando "format" ein und überlegt dann, wie die Parameter noch waren -
  545. dann hilft ein Druck auf Help, und es erscheint die Anleitung zu format.
  546. Anschließend kann die Eingabe fortgesetzt werden. Das funktioniert auch,
  547. wenn bereits Parameter nach format eingegeben worden sind.
  548. Wenn man die Help-Taste bei leerer Kommandozeile drückt, wird man nach dem
  549. zu erklärenden Kommando gefragt.
  550. Bei der Angabe des zu erklärenden Kommandos gelten die Regeln für erweiterte
  551. Wildcards, d.h. mit "r*" wird das erste Kommando erklärt, das mit r beginnt
  552. usw.
  553.  
  554. Beispiel:
  555.  
  556. $ format A: <HELP>                    Eingabe
  557.  
  558. format - Formatieren von Disketten            Ausgabe
  559. ..... (usw.)
  560.  
  561. $ format A: *                        weiter gehts
  562.  
  563. (In diesem Beispiel steht <HELP> für das Drücken der Help-Taste und * für
  564. die Cursor-Position am Ende. $ ist das Shell-Prompt.)
  565.  
  566. Der Pfadname der Datei commands.doc muß in der Shell-Variablen HELPFILE ge-
  567. speichert sein. Die Voreinstellung ist $HOME\doc\commands.doc. Wenn die Vari-
  568. able HELPFILE nicht gesetzt ist, wird die Datei help.txt im aktuellen Directory
  569. benutzt.
  570.  
  571. Anstelle von commands.doc kann auch jede andere Datei benutzt werden. Damit
  572. ein Kommando in der Datei erkannt wird, muß die Datei folgende Regeln er-
  573. füllen:
  574.  
  575. 1) Vor dem Text, der das Kommando erklärt bzw. der zu dem Kommando ausge-
  576. geben werden soll, muß eine Zeile stehen, die mit fünf Minuszeichen beginnt.
  577. 2) Direkt nach dieser Zeile muß eine Zeile stehen, die mit dem Kommando
  578. beginnt. Das Kommando geht vom Anfang der Zeile bis (exkl.) zum ersten Nicht-
  579. Buchstaben (Buchstaben sind a-z und A-Z, keine Umlaute, kein ß). Danach können
  580. weitere Informationen stehen, die nicht beachtet werden.
  581. 3) Der auszugebene Text beginnt mit der unter 2) beschriebenen Zeile und
  582. geht bis zur nächsten Zeile, die mit fünf Minuszeichen beginnt (exkl.).
  583.  
  584.  
  585. Beispiel:
  586.  
  587. -----                                    1)
  588. ls - Anzeigen von Directories                        2)
  589.                                     3)
  590. (Weitere Angaben)                            4)
  591.                                     5)
  592. -----                                    6)
  593.  
  594. Bei der Eingabe von "ls <HELP>" werden die Zeilen 2) bis 5) ausgegeben.
  595.  
  596. Natürlich kann man auch eine Kopie von commands.doc anfertigen und dort
  597. einige weitere beliebige Informationen eintragen, die unter entsprechenden
  598. Stichworten abgefragt werden können.
  599.  
  600. Die Ausgabe erfolgt wie mit dem Kommando "pg". Siehe hierzu commands.doc.
  601.  
  602.  
  603. b) Aus einer Datei
  604.  
  605. Es ist möglich, Dateien zu schreiben, die Shell-Kommandos enthalten
  606. und diese Dateien Kommando für Kommando von der Shell ausführen zu 
  607. lassen. Solche Dateien werden als Shell-Scripts (oder in der MS-DOS-Welt
  608. als Batch-Dateien) bezeichnet. Ein Shell-Script kann wiederum weitere
  609. Scripts ausführen usw., wobei die Tiefe der Rekursion durch den zur
  610. Verfügung stehenden Speicher und die systembedingte Maximalanzahl offener
  611. Dateien begrenzt ist. Rekursive Shellscripts sind natürlich auch möglich.
  612. Für die Kommandos in Shell-Scripts gelten dieselben Regeln wie für
  613. Kommandos, die über die Tastatur eingegeben werden. Leider ist die Aus-
  614. führung von Shell-Scripts derjenige Punkt, an dem die Okami-Shell und
  615. die normalen Unix-Shells am weitesten auseinanderklaffen, da beim Aufruf
  616. eines Shell-Scripts unter Unix dieses i.d.R. nicht von der Shell selber
  617. ausgeführt wird, sondern die Shell startet sich selber nochmals, um das
  618. Script auszuführen (Subshell). Auf dem ST ist diese Vorgehensweise wegen
  619. des begrenzten Speichers nicht zu empfehlen, weswegen jedes Shellscript
  620. von der Shell selber ausgeführt wird. Dies hat Konsequenzen z.B. bei der
  621. Ein/Ausgabeumleitung von Shell-Scripts und den einem Script übergebenen
  622. Parametern. Außerdem kann jedes Script auf alle Shellvariablen der aufrufenden
  623. Shell zugreifen und diese verändern.
  624.  
  625. Bei der Ausführung eines Shellscripts wird das Script erst vollständig in
  626. den Speicher geladen und dann im Speicher ausgeführt. Das liefert besonders
  627. bei der Ausführung von Diskette enorme Geschwindigkeitsvorteile. Genügend
  628. Speicher ist normalerweise immer vorhanden, wenn man bedenkt, daß Scripts
  629. i.d.R. kleine Dateien (3-5K) sind.
  630.  
  631. Bei Shellscripts gibt es die Möglichkeit, Programmierstrukturen wie if und
  632. while zu benutzen, die bei Tastatureingabe wenig Sinn machen. Damit ist
  633. es in der Tat möglich, Shellscripts zu schreiben, die wie ein Programm
  634. einer höheren Programmiersprache laufen. Siehe hierzu showpic.sh und
  635. commands.doc.
  636.  
  637.  
  638.  
  639. Es gibt vier Arten von Kommandos:
  640.     1) interne Kommandos,
  641.     2) externe Kommandos,
  642.     3) Shellfunktionen,
  643.     4) Kommentare.
  644.  
  645. INTERNE KOMMANDOS
  646. Ein internes Kommando ist ein Kommando, durch das eine Funktion innerhalb
  647. der Shell ausgeführt wird, das also in der Shell eingebaut ist. Interne
  648. Kommandos werden durch Eingabe ihres Namens aufgerufen.
  649.  
  650. EXTERNE KOMMANDOS
  651. Ein externes Kommando ist nicht in der Shell eingebaut, sondern in einer
  652. Datei auf einer Diskette, Ramdisk oder Festplatte vorhanden. Hierbei kann
  653. es sich sowohl um eine ausführbare Datei (.PRG, .TOS etc.) als auch um 
  654. ein Shellscript handeln.
  655. Externe Kommandos können durch Eingabe des vollständigen Pfadnamens der
  656. entsprechenden Datei, aber auch durch Eingabe des Kommandonamens (des
  657. Dateinamens ohne Pfad und Extender). Die zugehörige Datei wird auf den
  658. Pfaden gesucht, die in der Shell-Variablen PATH gespeichert sind.
  659. Externe Kommandos können nur ausgeführt werden, wenn ihr Datei-Extender
  660. einem der in den Shell-Variablen XEXT und SEXT gespeicherten entspricht.
  661. (Es kann jedoch jede Datei, unabhängig vom Dateinamen, explizit als Shell-
  662. script oder Binärdatei ausgeführt werden, und zwar mit den Kommandos "."
  663. und "exec".)
  664. Siehe hierzu auch den Abschnitt über externe Kommandos in commands.doc.
  665.  
  666.  
  667. SHELLFUNKTIONEN
  668.  
  669. Shellfunktionen sind Shellscripts, die resident im Speicher gehalten werden.
  670. Sie haben dieselben Eigenschaften wie Shellscripts und können deshalb auch
  671. genauso programmiert werden. Alles, was über die Verwendung von Shellscripts
  672. gesagt wird, gilt auch für Shellfunktionen.
  673. Jede Shellfunktion hat einen Namen, der bis zu 80 Zeichen lang sein darf.
  674. Groß- und Kleinschreibung wird unterschieden, d.h. "hallo" und "Hallo" sind
  675. zwei verschiedene Shellfunktionen. Es können bis zu 100 Shellfunktionen defi-
  676. niert werden.
  677. Bei der Ausführung haben Funktionen die oberste Priorität, kommen also noch
  678. vor den internen Kommandos. Es ist also möglich, interne Kommandos umzude-
  679. finieren, indem man eine Shellfunktion mit demselben Namen anlegt. Inner-
  680. halb dieser Funktion kann auf das ursprüngliche Kommando zugegriffen werden,
  681. indem man dem Kommando ein Ausrufezeichen (ohne Leerzeichen) vorstellt.
  682. Die Syntax einer Deklaration von Shellfunktionen ist:
  683.  
  684.  
  685. [Funktionsname] "(" Dateiname ")"        (1)
  686.  
  687.     oder
  688.  
  689. Funktionsname "()"                (2)
  690. "{"
  691.   {Zeilen des Funktionsrumpfes}
  692. "}"
  693.  
  694.     oder
  695.  
  696. Funktionsname "()"                (3)
  697. "{}"
  698.  
  699. (1) In der ersten Fassung wird die angegebene Datei als Shellscript in den
  700. Speicher geladen und unter dem Namen der Funktion abgespeichert. Wenn kein
  701. Funktionsname angegeben ist, wird der Basisname des Dateinamens (ohne Ex-
  702. tender) als Funktionsname benutzt. In dieser Fassung entspricht die Shell-
  703. funktion also einem speicherresidenten Shellscript.
  704. Wenn die angegebene Datei eine ausführbare Programmdatei ist, wenn also
  705. ihr erstes Wort 0x601a ist, wird das Programm geladen und eine Shellfunktion
  706. erzeugt, die das Programm mit exec -x startet. Auf diese Weise ist es möglich,
  707. auch Binärprogramme resident im Speicher zu halten und ohne Disketten- oder
  708. Plattenzugriffe beliebig oft zu starten.
  709. ACHTUNG: Die Vorgehensweise dabei beruht auf der Fähigkeit der Gemdos-Funktion
  710. Pexec, Binärprogramme zu laden und erst zu einem späteren Zeitpunkt unter
  711. Angabe der Basepage-Adresse zu starten. Die Dokumentation von Atari zu diesem
  712. Feature ist kurz und eindeutig; sie lautet: "Finger davon". Nichtsdestoweniger
  713. funktioniert es, aber es besteht keine Garantie, daß es immer oder mit allen
  714. Betriebssystemversionen funktioniert.
  715.  
  716. (2) In der zweiten Fassung wird die Funktion von der Tastatur oder dem
  717. Shellscript, in dem die Deklaration steht, gelesen. Wenn bereits eine
  718. Funktion mit dem angegebenen Namen existiert, wird sie umdefiniert. Wenn
  719. der Funktionsrumpf leer ist, wenn also die Zeilen mit { und } direkt auf-
  720. einander folgen, wird die Funktion gelöscht.
  721. In dieser Fassung wird die Eingabe verkürzt, d.h. Leerzeilen, Kommentar-
  722. zeilen und führende Leerzeichen werden nicht mit abgespeichert.
  723.  
  724. (3) In der dritten Fassung wird die Funktion gelöscht.
  725.  
  726. Die zweite und dritte Fassung erwarten also mehr als eine Zeile. Die weiteren
  727. Zeilen der Deklaration werden von der sog. "Sekundäreingabe" erwartet, also
  728. von dem Gerät oder der Datei, von der augenblicklich Kommandos gelesen
  729. werden (das ist nicht immer die Standardeingabe). Wenn es sich dabei um
  730. die Tastatur handelt, erscheint als Prompt der Inhalt der Shellvariablen
  731. PS2.
  732.  
  733. ACHTUNG: In keinem Fall darf zwischen Funktionsname und der geöffneten Klammer
  734. ein Leerzeichen stehen!!!
  735.  
  736.  
  737.  
  738. Beispiele:
  739.  
  740. hallo(hallo.sh)
  741.         initialisiert eine Funktion namens "hallo". Die Funktion
  742.         entspricht dem Shellscript hallo.sh.
  743.  
  744. hallo (hallo.sh)
  745.         ruft das Kommando hallo mit dem Parameter (hallo.sh) auf,
  746.         ist also KEINE Deklaration einer Shellfunktion!
  747.  
  748. (c:/bin/test.sh)
  749.         initialisiert eine Funktion aus der Datei c:/bin/test.sh.
  750.         Da kein Funktionsname angegeben ist, wird der Basisname der
  751.         Datei benutzt, es wird also die Shellfunktion "test" er-
  752.         zeugt.
  753.  
  754. (c:/bin/hallo.prg)
  755.         lädt das Programm hallo.prg und erzeugt eine Shellfunktion
  756.         namens hallo, die das geladene Programm startet. hallo
  757.         hat dabei folgenden Funktionsrumpf:
  758.             exec -lg c:/bin/hallo.prg 0x8f30a
  759.         wobei 0x8f30a die beim Laden ermittelte Adresse der Basepage
  760.         von hallo.prg ist.
  761.  
  762. hallo()
  763. {
  764.   echo Hallo, wie gehts?
  765.   read _
  766.   echo Es freut mich, daß es Dir $_ geht.
  767.   _=
  768. }
  769.         definiert die Funktion hallo mit dem angegebenen Funktions-
  770.         rumpf. Die Verwendung von Shellvariablen ist möglich; in
  771.         diesem Fall wird die Variable _ (Underscore) benutzt, die
  772.         für temporäre Verwendungen zur Verfügung steht.
  773.         Diese Deklaration kann sowohl in einem Shellscript stehen
  774.         als auch über die Tastatur eingegeben werden. Bei Tastatur-
  775.         eingabe erscheint das Prompt $PS2.
  776.  
  777. hallo()
  778. {}
  779.         Die Shellfunktion hallo wird gelöscht.
  780.  
  781. hallo()
  782. {
  783. }
  784.         Dito.
  785.  
  786. ()
  787.         (weder Funktions- noch Dateiname angegeben) ist ein Syntax-
  788.         fehler.
  789.  
  790.  
  791. Mit dem internen Kommando "fcts" kann eine Liste sämtlicher Shellfunktionen
  792. erzeugt werden. Die Definition einer beliebigen Shellfunktion kann mit dem
  793. Kommando "type" ausgegeben werden. Siehe hierzu commands.doc.
  794.  
  795.  
  796. Es gehört zur Philosophie von Unix, daß man an der reinen Eingabe nicht
  797. erkennen kann, ob es sich bei dem eingegebenen Kommando um ein internes
  798. Kommando, eine ausführbare Datei, ein Shellscript oder eine Shellfunktion
  799. handelt. Um das herauszufinden, gibt es das interne Kommando type. Siehe
  800. hierzu commands.doc.
  801.  
  802.  
  803. KOMMENTARE
  804.  
  805. Eine Eingabe gilt als Kommentar, wenn sie mit einem Doppelkreuz (#) beginnt
  806. oder wenn sie nur aus einer leeren Zeile besteht. Kommentare werden von
  807. der Shell nicht weiter beachtet und sind nützlich zum Dokumentieren von
  808. Shell-Scripts. Die Tastatureingabe von Kommentaren ist zwar möglich, aber
  809. nicht unbedingt sinnvoll.
  810.  
  811.  
  812. ERWEITERTE WILDCARDS
  813.  
  814. Die Okami-Shell erlaubt für die Angabe von Dateinamen ein Wildcard-System,
  815. das weit über das von Gemdos gestellte hinausgeht. Die einzigen Gemdos-
  816. Wildcards sind * und ?, wobei ein ein Dateiname nur einen Stern enthalten
  817. darf, und den nur am Ende von Name oder Extender. Bei "**" gibt es Probleme,
  818. "*hallo*" liefert nicht alle Dateinamen, die "hallo" enthalten usw.
  819. Die erweiterten Wildcards der Okami-Shell orientieren sich an denen, die von
  820. der Original-Unix-Shell zur Verfügung gestellt werden. Es bedeuten:
  821.  
  822. *    beliebig viele, auch null, beliebige Zeichen.
  823. ?    genau ein beliebiges Zeichen.
  824. [abcd]    genau ein Zeichen, und zwar eins der in den Klammern stehenden. Es
  825.     dürfen beliebig viele Zeichen angeführt sein.
  826. [a-g]    genau ein Zeichen, und zwar a, b, ... oder g. Das Minuszeichen bedeutet
  827.     also "bis".
  828. [~abc]    genau ein Zeichen, und zwar ein beliebiges bis auf die Zeichen in den
  829.     eckigen Klammern. Es dürfen beliebig viele Zeichen angeführt sein.
  830.  
  831. Der Punkt zwischen Dateiname und Extender wird dabei wie jedes andere Zeichen
  832. behandelt, "*" paßt also auf alle Dateinamen und nicht nur auf die ohne Ex-
  833. tender.
  834.  
  835. Beispiele:
  836.  
  837. *        alle Dateinamen.
  838. *.*        alle Dateinamen, die einen Extender haben.
  839. *.?        alle Dateinamen, deren Extender aus genau einem Zeichen besteht.
  840. *.[co]        alle Dateinamen mit Extender .c oder .o.
  841. *.[~co]        alle Dateinamen außer denen mit Extender .c und .o.
  842. [abcd]*[xyz]    alle Dateinamen, deren erstes Zeichen a, b, c oder d und deren
  843.         letztes Zeichen x, y oder z ist. Der Punkt, der den Extender
  844.         einleitet (falls vorhanden), kann irgendwo dazwischen stehen.
  845. a[0-9]        alle Dateinamen, die aus a, gefolgt von einer Ziffer bestehen,
  846.         also a0, a1, ..., a9.
  847. ??[a-z][0-9]    alle Dateinamen, die aus zwei beliebigen Zeichen, gefolgt von
  848.         einem Buchstaben und einer Ziffer bestehen.
  849.  
  850.  
  851. Wenn das Shell-Flag w nicht gesetzt ist, sind die erweiterten Wildcards außer
  852. Kraft gesetzt. Die Shell benutzt dann nur die Wildcards, die von TOS zur
  853. Verfügung gestellt werden.
  854. Das Programm für den Vergleich mit erweiterten Wildcards stammt von Rich Salz
  855. und wurde 1986 geschrieben. Ich habe es aus einer Mailbox.
  856.  
  857.  
  858. FLAGS UND PARAMETER
  859.  
  860. Jedem Kommando können Flags und Parameter übergeben werden. I.d.R. werden
  861. Parameter benutzt, um festzulegen, womit etwas getan werden soll, und die
  862. Flags legen fest, wie es getan werden soll.
  863.  
  864. Die Shell teilt die Eingabezeile in Worte auf. Worte werden durch Whitespace-
  865. Zeichen (Leerzeichen, Tab, Formfeed) getrennt. Durch doppelte (") oder ein-
  866. fache (') Anführungszeichen können auch Whitespace-Zeichen in Worten benutzt
  867. werden, z.B. ist
  868.     a b c d
  869. vier Worte, während
  870.     "a b c d"
  871. nur ein Wort ist. Einfache Anführungszeichen verhindern außerdem jede Art
  872. von Interpretation, d.h. innerhalb von einfachen Anführungszeichen werden
  873.     * keine Shellvariablen expandiert
  874.     * keine Slashes zu Backslash umgeformt
  875.     * keine Escape-Sequenzen (beginnent mit ^) interpretiert
  876. . Es ergibt also
  877.     $HOME
  878. den Inhalt der Shell-Variablen HOME und
  879.     '$HOME'
  880. den String $HOME.
  881.  
  882. Externen Kommandos werden alle übergebenen Flags und Parameter als Kommando-
  883. zeile übergeben. Alle exportierten Shell-Variablen werden den externen
  884. Kommandos im Environment übergeben. Das Betriebssystem limitiert die Länge
  885. der Kommandozeile auf maximal 128 Zeichen.
  886. Den internen Kommandos können beliebig viele Flags und Parameter überge-
  887. ben werden, allerdings ist für die meisten Kommandos nur eine beschränkte
  888. Anzahl von Parametern sinnvoll.
  889. Die Flags der internen Kommandos werden durch ein Minus- oder Pluszeichen
  890. eingeleitet. Näheres siehe commands.doc.
  891.  
  892. Die Shell benutzt eine Reihe eigener Flags, die mit dem internen Kommando
  893. set eingestellt werden können. Siehe hierzu commands.doc.
  894.  
  895.  
  896.  
  897. VERKETTETE KOMMANDOS
  898.  
  899. Kommandos können in einer Zeile durch Semikolon getrennt angeführt werden.
  900. Die Kommandos werden von links nach rechts ausgeführt.
  901.  
  902.  
  903. Wenn eine eingegebene Zeile mit einem Dach (^) endet, wird anstelle des
  904. Daches die Fortsetzung der Zeile von der Sekundäreingabe eingelesen. Das
  905. entspricht dem Backslash in Unix.
  906. Beispiel:
  907. ec^
  908. ho ha^
  909. l^
  910. lo
  911.  
  912. entspricht "echo hallo". Dabei kann diese Eingabe sowohl von der Tastatur
  913. als auch aus einem Shellscript oder einer Shellfunktion stammen.
  914.  
  915.  
  916. ----------------------------------------------------------------------------
  917. SHELLVARIABLEN
  918.  
  919. Eine besondere Art von internem Kommando ist die Zuweisung eines Wertes an
  920. eine Shellvariable. Alle Shellvariablen sind Stringvariablen. Der Name einer
  921. Shellvariablen kann in beliebiger Reihenfolge Buchstaben, Ziffern und Under-
  922. scores (_) enthalten.
  923.  
  924. Beschränkungen:
  925.     Maximalanzahl der Shellvariablen: 100
  926.     Maximallänge des Variablennamens und -Wertes:
  927.                     unbeschränkt (80 relevante Stellen)
  928.  
  929. Wer damit nicht auskommt, benutze den Software-Support, um eine Version
  930. der Shell mit größeren Kapazitäten zu erhalten.
  931.  
  932. Jede Shell-Variable hat einen Status, der aus beliebigen (auch null) der
  933. folgenden Eigenschaften besteht:
  934.  
  935. USR (User)    Die Variable wurde vom Benutzer angelegt oder verändert.
  936. SYS (System)    Es handelt sich um eine Systemvariable, die von der Shell
  937.         verwaltet wird. Hierzu gehören z.B. die Positionsparameter
  938.         $0, $1..., $#, $? usw.
  939. R/O (Read-Only) Der Wert der Variablen darf nicht verändert und die Variable
  940.         darf nicht gelöscht werden.
  941. EXP (Export)    Die Variable befindet sich im Environment.
  942.  
  943. Die Eigenschaften USR und SYS können nicht beeinflußt werden. Die Eigen-
  944. schaften R/O und EXP können mit den Kommandos readonly und export gesetzt
  945. und gelöscht werden. Siehe hierzu commands.doc.
  946.  
  947.  
  948. DEKLARATION
  949. Shell-Variablen brauchen nicht deklariert zu werden.
  950.  
  951.  
  952. ZUWEISUNG
  953. Die Zuweisung eines Wertes an eine Shell-Variable geschieht durch eine
  954. Eingabe der Form
  955.     Variable=Wert
  956.  
  957. z.B.:
  958.     NAME=Okami-Shell
  959.  
  960. Es wird der String "Okami-Shell" der Shellvariablen NAME zugewiesen. In
  961. Unix ist es üblich, Shell-Variablen in Großbuchstaben zu schreiben, es
  962. sind allerdings auch Kleinbuchstaben möglich. NAME und Name sind zwei
  963. unterschiedliche Variablen.
  964. Auf die folgende Weise kann einer Variablen ein leerer Wert zugewiesen
  965. werden:
  966.     Variable=""
  967. Der Wert der Variablen wird also gelöscht, aber die Variable selber bleibt
  968. bestehen.
  969.  
  970. Außerdem können die internes Kommandos "read", "fsel" und "mouse" zur Zuwei-
  971. sung von Eingaben an Shellvariablen benutzt werden. Siehe hierzu
  972. commands.doc.
  973.  
  974.  
  975. BENUTZUNG
  976. Der Wert einer Shell-Variablen kann durch Angabe des Variablennamens mit
  977. vorgestelltem Dollar-Zeichen angegeben werden. In einer Eingabezeile der
  978. Shell werden erst alle Variablen zu den betreffenden Werten expandiert,
  979. bevor die Zeile ausgeführt wird. Shell-Variablen, an die noch kein Wert
  980. zugewiesen wurde, werden als Leerstrings behandelt.
  981.  
  982. Beispiele:
  983.  
  984. NAME=Okami-Shell
  985. echo $NAME
  986.  
  987. erzeugt die Ausgabe "Okami-Shell".
  988.  
  989. NAME=Okami-Shell
  990. echo Der Name ist $NAME und nicht anders. 
  991.  
  992. erzeugt die Ausgabe "Der Name ist Okami-Shell und nicht anders."
  993.  
  994. VAR1=$VAR2
  995.  
  996. weist der Variablen VAR1 den Wert der Variablen VAR2 zu.
  997.  
  998. VAR1=VAR2
  999. VAR3=VAR1
  1000. $VAR1=$VAR3
  1001.  
  1002. weist der Variablen VAR2 den String "VAR1" zu (ja, wirklich.)
  1003.  
  1004.  
  1005. Es ist auch möglich, Shell-Kommandos an Variablen zuzuweisen und dann aus-
  1006. führen zu lassen:
  1007.  
  1008. CC=c:\compiler\cc.ttp
  1009. $CC test.c
  1010.  
  1011. ruft das Programm c:\compiler\cc.ttp mit dem Parameter test.c auf.
  1012.  
  1013.  
  1014. LÖSCHEN
  1015. Auf die folgende Weise werden Variablen gelöscht:
  1016.     Variable=
  1017. Dies ist nicht zu verwechseln mit dem Löschen des Inhalts einer Variablen
  1018. (siehe oben). Wenn hinter dem Gleichheitszeichen nichts steht, wird die
  1019. Variable vollständig gelöscht und belegt danach keinen Platz mehr in der
  1020. Variablentabelle.
  1021. Dies ist notwendig, da die Shell nur über eine begrenzte Anzahl
  1022. von Variablen verfügt. Besonders Shell-Scripts, die Variablen für lokale
  1023. Zwecke benutzen, sollten diese Variablen nach der Benutzung wieder frei-
  1024. geben.
  1025.  
  1026. Beispiel:
  1027.  
  1028. NAME=
  1029.  
  1030. Die Shell-Variable NAME wird gelöscht.
  1031.  
  1032. Beim Löschen verliert die Variable natürlich auch ihren Status.
  1033. Um den Status zu erhalten, darf nur der Wert der Variablen gelöscht werden
  1034. (NAME="").
  1035.  
  1036. Es ist möglich, eine Shellvariable zu benutzen, deren Name nur aus einem
  1037. Underscore (_) besteht. Die Verwendung einer solchen Variablen für kurz-
  1038. zeitige lokale Verwendungen ist z.B. in der Programmiersprache Prolog
  1039. üblich.  
  1040.  
  1041.  
  1042. SAVECWD=$CWD
  1043. cd c:\work\test
  1044. .......................(weitere Kommandos)
  1045. cd $SAVECWD
  1046.  
  1047. Das aktuelle Verzeichnis (das stets in der Variablen CWD steht) wird in die
  1048. Variable SAVECWD gesichert. Danach wird das aktuelle Verzeichnis geändert
  1049. (mit dem internen Kommando "cd"), und es werden weitere Kommandos ausgeführt.
  1050. Anschließend wird das aktuelle Verzeichnis wieder restauriert.
  1051. Diese Technik sollte von allen Shellscripts benutzt werden, die das aktuelle
  1052. Verzeichnis ändern. Unter Unix werden Shellscripts stets von Subshells
  1053. ausgeführt, und das aktuelle Verzeichnis ist eine Eigenschaft eines
  1054. Prozesses, weswegen Shellscripts das aktuelle Verzeichnis ändern können,
  1055. ohne das aktuelle Verzeichnis der aufrufenden Shell zu beeinflussen. Unter
  1056. TOS ist das aktuelle Verzeichnis eine Eigenschaft des jeweiligen Laufwerks,
  1057. und das aktuelle Laufwerk ist eine globale Eigenschaft des gesamten Sys-
  1058. tems. Die Okami-Shell benutzt keine Subshells, und daher kann jedes Shell-
  1059. script das aktuelle Verzeichnis der Shell ändern, was in der praktischen
  1060. Anwendung nicht immer erwünscht ist.
  1061. Das umständliche Speichern und Restaurieren des aktuellen Verzeichnisses
  1062. entfällt, wenn die Shell-Flags x und c gesetzt sind. Siehe hierzu das
  1063. interne Kommando set in commands.doc.
  1064.  
  1065.  
  1066. SYSTEMVARIABLEN
  1067. Eine Reihe von Shellvariablen werden von der Shell selber angelegt und
  1068. benutzt. Es ist teilweise möglich, die Werte dieser Variablen zu verändern.
  1069. Die Systemvariablen sind:
  1070.  
  1071. PS1        Das Eingabeprompt. Kann vom Anwender verändert werden (was
  1072.         normalerweise im Profile geschieht). Der Defaultwert ist
  1073.         " $ ".
  1074. PS2        Das sekundäre Eingabeprompt. Erscheint z.B. bei der Eingabe
  1075.         von Shellfunktionen. Kann beliebig verändert werden, der
  1076.         Defaultwert ist "> ".
  1077. LOGNAME     Der Programmname ("Okami Shell"). Kann nicht verändert
  1078.         werden.
  1079. VERSION     Die Versionsnummer der Shell. Kann nicht verändert werden.
  1080. TERM        Der Rechnertyp, kann auf das individuelle Modell (z.B.
  1081.         "Atari 1040 STE" oder "Mega ST 4") eingestellt werden.
  1082.         Diese Einstellung erfolgt am besten in der Konfigurations-
  1083.         datei $HOME\profile. Der Defaultwert ist "Atari ST". Ist
  1084.         in der jetzigen Version der Shell noch ohne weitere Be-
  1085.         deutung.
  1086. CWD        Das aktuelle Verzeichnis. Wird nach jedem Wechsel des
  1087.         Verzeichnisses automatisch aktualisiert und sollte nicht
  1088.         von Hand verändert werden. (Durch eine Zuweisung an diese
  1089.         Variable wird das aktuelle Verzeichnis NICHT geändert.)
  1090. HOME        Das Verzeichnis, aus dem die Shell gestartet wurde (genauer
  1091.         gesagt das aktuelle Verzeichnis zum Zeitpunkt des Starts
  1092.         der Shell). Kann nicht verändert werden.
  1093. SHELL        Hier soll der vollständige Aufrufpfad des Shellprogramms
  1094.         eingetragen sein. Da die Shell diesen nicht mit völliger
  1095.         Sicherheit selber bestimmen kann, wird hier $HOME\sh.ttp
  1096.         eingetragen. Kann beliebig angepaßt werden, wenn diese An-
  1097.         gabe einmal nicht zutrifft.
  1098. PAGELEN     Die Anzahl der Zeilen auf dem Bildschirm. Wird von dem
  1099.         internen Kommando pg benutzt. Kann beliebig eingestellt
  1100.         werden. Die Defaulteinstellung ist 23.
  1101. PIPDIR        Das Laufwerk und der Pfad, auf dem die Hilfsdateien des
  1102.         Pipelinings erzeugt werden. Muß auf einem beschreibbaren
  1103.         Laufwerk (am besten auf einer Ramdisk) liegen. Die Default-
  1104.         einstellung ist $HOME. Kann beliebig verändert werden.
  1105. NULL        Der Name des Gerätes oder der Datei, an die die Ausgaben
  1106.         geleitet werden, die zum Null-Gerät (NULL:) umgeleitet
  1107.         werden. Kann verändert werden. Die Defaulteinstellung 
  1108.         ist "PRN:" (paralelle Schnittstelle). Wer einen Drucker hat,
  1109.         sollte hier eine Datei z.B. auf der Ramdisk eintragen. Die
  1110.         Einstellung AUX: für die serielle Schnittstelle ist nicht
  1111.         möglich, da diese Schnittstelle von der Standard-Fehleraus-
  1112.         gabe belegt ist.
  1113. XEXT        Eine Liste von durch Kommata getrennten Extendern. Dateien
  1114.         mit einem der hier aufgeführten Extender können als Binär-
  1115.         programme gestartet werden. Die Defaulteinstellung ist
  1116.         ".prg,.tos,.ttp,.app". Die Punkte vor den Extendern müssen
  1117.         mit angegeben werden. Kann beliebig verändert werden.
  1118. SEXT        Eine Liste von durch Kommata getrennten Extendern. Dateien
  1119.         mit einem der hier aufgeführten Extender können als Shell-
  1120.         Scripts gestartet werden. Die Defaulteinstellung ist
  1121.         ".sh". Die Punkte vor den Extendern müssen mit angegeben
  1122.         werden. Kann beliebig verändert werden.
  1123. GEXT        Eine Liste von durch Kommata getrennten Extendern. Binär-
  1124.         Dateien mit einem der hier aufgeführten Extender werden als
  1125.         GEM-Programme gestartet, d.h. nicht direkt, sondern über die
  1126.         Shellfunktion gemexec gestartet. Siehe hierzu den Abschnitt
  1127.         über gemexec in commands.doc. Kann beliebig verändert werden.
  1128.         Wie in commands.doc erklärt, müssen die Extender nicht unbe-
  1129.         dingt denen von ausführbaren Programmdateien entsprechen.
  1130.         Die Defaulteinstellung ist .prg .
  1131. PATH        Eine Liste von durch Kommata getrennten Pfaden. Bei der
  1132.         Eingabe eines externen Kommandos ohne vollständige Pfadan-
  1133.         gabe wird die Datei auf den hier angegebenen Pfaden gesucht.
  1134.         Die Defaulteinstellung ist ".,..,$HOME,$HOME\bin". Kann be-
  1135.         liebg verändert werden.
  1136. CDPATH        Eine Liste von durch Kommata getrennten Pfaden. Beim Wechsel
  1137.         des aktuellen Arbeitsverzeichnisses mit "cd" wird, wenn
  1138.         der bei cd angegebene Pfad nicht existiert und nicht abso-
  1139.         lut angegeben ist, auf den in CDPATH gespeicherten Pfaden
  1140.         gesucht. Die Defaulteinstellung ist "..,\". Kann beliebig
  1141.         verändert werden.
  1142. HELPFILE    Der Name der Datei, aus der die Erklärungen, die bei Druck
  1143.         auf die Help-Taste ausgegeben werden, stehen. Die Default-
  1144.         einstellung ist "$HOME\commands.doc". Kann beliebig ver-
  1145.         ändert werden.
  1146. COLUMNS     Enthält die Anzahl der Textzeilen auf dem Bildschirm (24
  1147.         oder 48). Wird nur von dem Kommando scr eingestellt und
  1148.         sollte nicht von Hand verändert werden.
  1149. 0        Enthält bei Eingabe eines Kommandos den Namen des Kommandos
  1150.         und beim automatischen Aufruf der Funktion gemexec den voll-
  1151.         ständigen Pfad des aufzurufenden Programms.
  1152. 1        Enthält den ersten Parameter der Eingabezeile.
  1153. 2        Enthält den zweiten Parameter der Eingabezeile usw.
  1154. #        Enthält die Anzahl der Parameter der Eingabezeile.
  1155. *        Enthält die vollständige Eingabezeile.
  1156. ?        Enthält den Rückgabewert des zuletzt ausgeführten Kommandos.
  1157.  
  1158.  
  1159. Nach dem Start der Shell werden Variablendefinitionen aus dem Environment
  1160. gelesen und ausgeführt. Auf diese Weise können alle Variablen (auch LOGNAME,
  1161. HOME usw.) geändert, aber keine gelöscht werden.
  1162.  
  1163. ----------------------------------------------------------------------------
  1164. EIN/AUSGABE-UMLEITUNG
  1165.  
  1166. 1) Für interne Kommandos
  1167.  
  1168. Die Eingabe, Ausgabe und Fehlerausgabe jedes internen Kommandos kann auf
  1169. einfache Weise in bzw. aus einer beliebigen Datei oder zu bzw. von einem
  1170. Gerät umgeleitet werden.
  1171.  
  1172. Folgende Umleitungsmöglichkeiten stehen zur Verfügung:
  1173.  
  1174. < Datei         Umleitung der Eingabe
  1175. > Datei         Umleitung der Ausgabe, die Datei wird vorher gelöscht
  1176. >> Datei        Anhängen der Ausgabe an die Datei
  1177. 2> Datei        Umleitung der Fehlerausgabe, die Datei wird vorher
  1178.             gelöscht
  1179. 2>> Datei        Anhängen der Fehlerausgabe an die Datei
  1180.  
  1181.  
  1182. Anstelle von "Datei" können auch die folgenden Geräte angegeben sein:
  1183.  
  1184.     CON:        Konsole (Default)
  1185.     PRT:        parallele Schnittstelle (Drucker)
  1186.     AUX:        serielle RS232-Schnittstelle (Modem)
  1187.     NULL:        ignorieren
  1188.  
  1189. Das Gerät NULL:, auch Null-Gerät genannt (in Unix: /dev/null), wird nicht
  1190. vom Betriebssystem des ST unterstützt, sondern von der Shell simuliert.
  1191. Der Zweck eines Null-Gerätes ist, die Ausgabe oder Fehlerausgabe eines
  1192. Kommandos zu unterdrücken. Die Shell-Variable NULL gibt an, wo die
  1193. Ausgabe, die an NULL: umgeleitet wird, tatsächlich landen soll. Die
  1194. Voreinstellung ist die RS232-Schnittstelle, und dies sollte nur geändert
  1195. werden, wenn diese Schnittstelle belegt ist. Im Notfall kann man als
  1196. NULL eine reguläre Datei auf der Ramdisk oder Festplatte angeben.
  1197. Wenn NULL die RS232-Schnittstelle ist, sollte man mit dem Kommando
  1198. "rsconf -s19200" diese auf die höchstmögliche Übertragungsgeschwindigkeit
  1199. einstellen, damit die Operationen mit dem Null-Gerät möglichst schnell
  1200. gehen. Ein geeigneter Ort für diese Einstellung ist das Profile.
  1201.  
  1202. Beispiel:
  1203.     rm *.dup
  1204. löscht sämtliche dup-Dateien, gibt aber eine Fehlermeldung aus, wenn keine
  1205. solchen Dateien vorhanden sind oder wenn sie schreibgeschützt sind.
  1206. Um die Fehlermeldung zu unterdrücken, kann man stattdessen schreiben:
  1207.     rm *.dup 2>NULL:
  1208. Dadurch werden die Fehlermeldungen an das Null-Gerät geleitet.
  1209. (Nebenbei: bei Verwendung von
  1210.     rm -f *.dup
  1211. werden auch keine Fehlermeldungen ausgegeben, allerdings werden damit auch
  1212. schreibgeschützte Dateien gelöscht.)
  1213.  
  1214.  
  1215. Wenn keine Umleitung angegeben ist, geht die Eingabe von der Tastatur
  1216. und die Ausgabe und Fehlerausgabe zum Bildschirm, genauer gesagt zu der
  1217. Standard-Ein- und -Ausgabe der Shell selber (die beim Start von sh.ttp
  1218. angegeben werden kann).
  1219.  
  1220.  
  1221. Pipelining
  1222.  
  1223. Die Idee des Pipelining ist es, die Ausgabe eines Kommandos zur Eingabe
  1224. des nächsten zu machen. So schreibt z.B. das memex-Kommando einen Speicher-
  1225. bereich auf seine Ausgabe, und das hd-Kommando fertigt von seiner Eingabe
  1226. ein Hexdump an. Mit dem Pipelining können beide Kommandos verbunden werden,
  1227. d.h. man bekommt ein Hexdump eines Speicherauszuges.
  1228. Um zwei Kommandos in einer Pipeline zu verbinden, wird zwischen sie ein senk-
  1229. rechter Strich (|), auch Pipe genannt, gesetzt, z.B.:
  1230. hd sh.ttp | pg
  1231. Die Ausgabe des hd-Kommandos (ein langer Hexdump) wird zur Eingabe des pg-
  1232. Kommandos, wodurch der Hexdump seitenweise angezeigt wird.
  1233. Die Schreibweise a | b ist äquivalent zu: (a und b sind beliebige Kommandos
  1234. incl. ihren Parametern)
  1235.  
  1236. tmp=$PIPDIR\pip$$
  1237. a > $tmp
  1238. chmod +h $tmp
  1239. b < $tmp
  1240. rm $tmp
  1241. tmp=
  1242.  
  1243. (mit zwei kleinen Unterschieden: 1) zum Bilden eines eindeutigen Dateinamens
  1244. wird nicht $$, sondern ein anderer Zähler benutzt, und 2) es wird keine
  1245. Shellvariable benutzt.)
  1246. Dies ist ein wesentlicher Unterschied zu Unix, wo alle an einer Pipe be-
  1247. teiligten Kommandos (Prozesse) gleichzeitig laufen. Eine Pipeline ist
  1248. unter Unix eine Einrichtung des Betriebssystems, die von der Okami-Shell
  1249. nur simuliert wird. (Wie gesagt, Okami ist eine Shell und kein Betriebs-
  1250. system.)
  1251.  
  1252. Das Laufwerk und der Ordner, auf dem die Pipe-Dateien erzeugt werden, kann
  1253. mit der Shellvariablen PIPDIR eingestellt werden. Die Default-Einstellung
  1254. beim Start der Shell ist $HOME. Dadurch bietet sich die Möglichkeit, die
  1255. Pipe-Dateien auf ein schnelles Laufwerk zu legen, z.B. auf eine Ramdisk
  1256. oder eine wenig benutzte Partition der Festplatte.
  1257. VORSICHT: Wenn $PIPDIR auf einen nicht existierenden Ordner oder Laufwerk
  1258. eingestellt ist, erscheinen anstelle von Pipe-Operationen nur Fehlermel-
  1259. dungen der Form:
  1260.     Error: cannot open .....\pip3
  1261. (Anstelle von ...... steht der Inhalt von PIPDIR.)
  1262. In diesem Fall wird keins der an einer Pipe beteiligten Kommandos ausge-
  1263. führt.
  1264.  
  1265. Die Pipe-Datei kann mit folgendem Kommando sichtbar gemacht werden:
  1266.     ls -a $PIPDIR\pip* | cat
  1267.  
  1268.  
  1269. 2) Für externe Kommandos
  1270.  
  1271. Theoretisch funktionieren sämtliche Ein/Ausgabe-Umleitungen inklusive der
  1272. Pipeline auch mit externen Kommandos. In der Praxis jedoch erlauben nicht
  1273. alle Programme diese Möglichkeit, z.B weil sie Tastatur und Bildschirm direkt
  1274. über die entsprechenden Bios-Funktionen (Bconout etc.) ansprechen, die sich
  1275. nicht umleiten lassen.
  1276. Die Okami-Shell leitet die Ein/Ausgabe auf Gemdos-Basis um, was bedeutet,
  1277. daß alle Programme, die für die Ein/Ausgabe Gemdos-Funktionen (Cconout etc.)
  1278. benutzen, umgeleitet werden können. C-Programme, die die Standard-Streams
  1279. stdin und stdout benutzen, werden normalerweise korrekt umgeleitet.
  1280. GEM-Programme sind von vornherein gegen jede Art der Umleitung immun, da sie
  1281. den Bildschirm über den entsprechenden GEM-Gerätetreiber ansprechen.
  1282.  
  1283. ----------------------------------------------------------------------------
  1284. COMMAND SUBSTITUTION
  1285.  
  1286. Die Okami-Shell bietet die Möglichkeit, die Ausgabe eines Kommandos in eine
  1287. Kommandozeile einzubauen. Möchte man z.B. eine Ausgabe wie "Es sind ... Bytes
  1288. frei" erzeugen, in die die Anzahl der freien Bytes (die mit dem Kommando mem
  1289. ermittelt werden kann) eingebaut sind, dann kann die Ausgabe von mem auf fol-
  1290. gende Weise in das echo-Kommando eingebaut werden:
  1291.  
  1292.     echo Es sind `mem` Bytes frei.
  1293.  
  1294. Alles, was in einer Eingabezeile zwischen zwei Accent grave (`) steht, wird
  1295. als Kommando betrachtet und ausgeführt. Die Ausgabe wird anstelle der in
  1296. Accent grave stehenden Zeichenkette in die Eingabezeile eingesetzt. Dieses
  1297. Verfahren wird als Command Substitution bezeichnet.
  1298. Wenn die Ausgabe des Kommandos über mehrere Zeilen geht, wird nur die erste
  1299. Zeile (also die Ausgabe bis zum ersten Zeilenende) benutzt.
  1300. Als Zwischenspeicher für die Ausgabe des Kommandos wird eine Datei namens
  1301. $PIPDIR/csubXXXX benutzt. XXXX ist hierbei eine laufende Nummer, und $PIPDIR
  1302. ist das Laufwerk, über das auch die Pipelining-Operationen laufen. Diese Datei
  1303. wird nach Verwendung gelöscht.
  1304.  
  1305. Beispiele:
  1306.     Speichern der Shellflags:    SET=`set -`
  1307.     Wiederherstellen mit:        set $SET
  1308.  
  1309.     Anzeigen einer Datei, die in demselben Ordner liegt wie $FILE1, die
  1310.     aber denselben Basisnamen wie $FILE2 hat:
  1311.         cat `dirname $FILE1`/`dirname $FILE2`
  1312.  
  1313.     Löschen der ältesten Datei mit Nachfrage:
  1314.         rm -i `ls -t`
  1315.  
  1316. ----------------------------------------------------------------------------
  1317. ENVIRONMENT
  1318.  
  1319. Die Okami-Shell bietet die Möglichkeit, Definitionen von Shell-Variablen
  1320. in das Environment zu übernehmen. Diese Definitionen werden dann allen
  1321. gestarteten Programmen übergeben. Mit dem internen Kommando export können
  1322. beliebige Shellvariablen in das Environment ausgenommen oder daraus ent-
  1323. fernt werden.
  1324.  
  1325. In der Basepage eines Programms steht ab Offset 0x2c die Adresse des
  1326. Environment-Strings. Diese Adresse wird berechnet als:
  1327.     char *BaseAdr;
  1328.     char *EnvAdr;
  1329.     EnvAdr = *(char **)(BaseAdr+0x2c);
  1330. BaseAdr ist die Adresse der Basepage (wird irgendwie vom Compiler zur Ver-
  1331. fügung gestellt). EnvAdr ist dann die Adresse des Environment-Strings.
  1332. Dieser String hat folgende Syntax: (EBNF, nicht C)
  1333.  
  1334.  EnvString    ::=  { VarDefinition } "\0"
  1335.  VarDefinition    ::=  VarName "=" VarWert "\0"
  1336.  
  1337. Beispiel:
  1338.     "a=Variable a\0b=Variable b\0usw=undsoweiter\0\0"
  1339. Es werden folgende Variablen gesetzt:
  1340. a   auf  "Variable a"
  1341. b   auf  "Variable b"
  1342. usw auf  "undsoweiter"
  1343.  
  1344.  
  1345. Die Shell benutzt eine Funktion namens EnvInit(), mit der der Environment-
  1346. String in einen Array von String-Adressen
  1347.     char *envp[]
  1348. umgeformt wird. Dabei zeigen alle Elemente dieses Arrays in den Environment-
  1349. String. Die Adresse eines solchen Arrays ist normalerweise (d.h. unter 
  1350. Unix) das dritte Argument der main()-Funktion.
  1351. Wer an dieser Funktion interessiert ist, kann sich den Source-Code bestellen
  1352. (Taschenrechner nicht vergessen).
  1353.  
  1354.  
  1355.  
  1356.  
  1357. ----------------------------------------------------------------------------
  1358. GRÜßE
  1359.  
  1360. 1) An die Firma GRP in Aachen, für lebenswichtige Kenntnisse in C und Unix.
  1361.  
  1362. 2) Wer in Berlin wohnt und am Zen-Dojo in der Zossener Straße vorbeikommt,
  1363.    bestellt bitte Jonas und Wim viele Grüße von mir.
  1364.  
  1365. 3) An Goofie Breuer, der mir für einen Spottpreis zwei Zauberkästen ver-
  1366.    hökert hat, auf denen "Atari 400" und "Atari 800" steht
  1367.  
  1368. 4) Für die Begleitung in zahllosen Stunden voller Lust und Frust vor der
  1369.    flimmerfreien Flimmerkiste:
  1370.    Mike Oldfield, Little Richard, Bill Haley, Tommy Roe, Lesley Gore, Pat
  1371.    Boone, Elvis Presley, Chuck Berry, Del Shannon, Chris Montez, Billy Joe
  1372.    Royal, The Box Tops, The Cascades, Trini Lopez, Chris Andrews, Mary Hopkins,
  1373.    The Tremoloes, Bobby Vee, The Kinks, The Turtles, The Swinging Blue Jeans,
  1374.    Shane Fenton, The Piltdown Men, Helen Shapiro, Cliff Richard, The Cowsills,
  1375.    Jerry Lee Lewis, Melanie, Buddy Hollie, The Lovin' Spoonful, The Crystals,
  1376.    The Knickerbockers, The Crests, Every Mother's Son, The Shangri Las u.v.a.
  1377.